package com.wangsb.code0401;

import java.io.FileInputStream;


import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @Description: TODO
 * @author: shenbing.wang@hand-china
 * @date: 2021年06月20日 14:47
 */

/*  基于学生信息管理系统增加以下两个功能：

          a.自定义学号异常类和年龄异常类，并在该成员变量不合理时产生异常对象并抛出。

          b.当系统退出时将 List 集合中所有学生信息写入到文件中，当系统启动时读取文件中所 有学生信息到 List 集合中。
          */
public class Code401 {


    public static void main(String[] args) throws AgeAndStuNoException {

        List<Student> students = readlist();
        StudentSystem.selectStus(students);
        while (true) {
            System.out.println("===============欢迎来到学生管理系统=============");
            System.out.println("1、查询学生信息列表\t\t 2、增加学生信息\t\t 3、删除学生\t\t 4、修改学生\t\t 5、退出系统");
            System.out.println("请选择您的操作:");
            Scanner scanner = new Scanner(System.in);
            int i = scanner.nextInt();
            if (1 == i) {
                StudentSystem.selectStus(students);
            }
            if (2 == i) {
                StudentSystem.insert(students);
            }
            if (3 == i) {
                StudentSystem.delete(students);
            }
            if (4 == i) {
                StudentSystem.update(students);
            }
            if (5 == i) {
                writelist(students);
                System.out.println("退出系统！");
                break;
            }

        }

    }

    public static List<Student> readlist() {
        ObjectInputStream in = null;
        ArrayList<Student> stus = new ArrayList<>();
        try {
            in = new ObjectInputStream(new FileInputStream("F:/student.txt"));
            stus = ( ArrayList) in.readObject();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != in) {
                try {
                    in.close();

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

        return stus;
    }

    public static void writelist(List list) {
        ObjectOutputStream out = null;
        try {
            out = new ObjectOutputStream(new FileOutputStream("F:\\student.txt"));
            out.writeObject(list);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (out != null) {
                try {
                    out.close();

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

    }
}
